home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / moni / systemviewer.lha / SystemViewer.c < prev    next >
C/C++ Source or Header  |  2001-04-25  |  22KB  |  827 lines

  1. /****h* SysTemViewer/SystemViewer.c [1.1] *******************************
  2. *
  3. * NAME
  4. *    SystemViewer
  5. *
  6. * DESCRIPTION
  7. *    The main GUI for various System Information Displayers & 
  8. *    Requesters.
  9. *
  10. *  GUI Designed by : Jim Steichen
  11. *************************************************************************
  12. *
  13. */
  14.  
  15. #include <string.h>
  16.  
  17. #include <exec/types.h>
  18.  
  19. #include <AmigaDOSErrs.h>
  20.  
  21. #include <intuition/intuition.h>
  22. #include <intuition/classes.h>
  23. #include <intuition/classusr.h>
  24. #include <intuition/gadgetclass.h>
  25.  
  26. #include <workbench/workbench.h>
  27. #include <workbench/startup.h>
  28. #include <workbench/icon.h>
  29.  
  30. #include <dos/dostags.h> // for SYS_Asynch, etc.
  31.  
  32. #include <libraries/gadtools.h>
  33.  
  34. #include <graphics/displayinfo.h>
  35. #include <graphics/gfxbase.h>
  36.  
  37. #include <clib/exec_protos.h>
  38. #include <clib/intuition_protos.h>
  39. #include <clib/gadtools_protos.h>
  40. #include <clib/graphics_protos.h>
  41. #include <clib/utility_protos.h>
  42. #include <clib/diskfont_protos.h>
  43.  
  44. #include "CPGM:GlobalObjects/CommonFuncs.h"
  45.  
  46. #define AssignBt     0
  47. #define LockBt       1
  48. #define MountBt      2
  49. #define MemoryBt     3
  50. #define ScreenBt     4
  51. #define TaskBt       5
  52. #define VectorBt     6
  53. #define DeviceBt     7
  54. #define FontBt       8
  55. #define HardwareBt   9
  56. #define InterruptBt  10
  57. #define PortBt       11
  58. #define ResidentBt   12
  59. #define SemaphoreBt  13
  60.  
  61. #define Sys_CNT      14
  62.  
  63. PRIVATE char v[] = "\0$VER: SystemViewer 1.1 (25-Apr-2001) by J.T. Steichen\0";
  64.  
  65. // ----------------------------------------------------------------------
  66. IMPORT struct WBStartup *_WBenchMsg;
  67.  
  68. // ----------------------------------------------------------------------
  69.  
  70. struct IntuitionBase *IntuitionBase;
  71. struct GfxBase       *GfxBase;
  72. struct Library       *GadToolsBase;
  73. struct Library       *IconBase = NULL;
  74.  
  75. // ----------------------------------------------------------------------
  76.  
  77. PRIVATE struct Screen         *Scr      = NULL;
  78. PRIVATE struct Window         *SysWnd   = NULL;
  79. PRIVATE struct Gadget         *SysGList = NULL;
  80. PRIVATE struct IntuiMessage    SysMsg;
  81. PRIVATE struct Gadget         *SysGadgets[ Sys_CNT ];
  82.  
  83. PRIVATE UBYTE                 *PubScreenName = "Workbench";
  84. PRIVATE APTR                   VisualInfo    = NULL;
  85.  
  86. PRIVATE UWORD  SysLeft     = 189;
  87. PRIVATE UWORD  SysTop      = 16;
  88. PRIVATE UWORD  SysWidth    = 290;
  89. PRIVATE UWORD  SysHeight   = 170;
  90. PRIVATE UBYTE *SysWdt      = "System Viewer ©1999-2001:";
  91. PRIVATE UBYTE *SysScrTitle = "SystemViewer ©1999-2001 by J.T. Steichen";
  92.  
  93. PRIVATE struct TextFont *SysFont = NULL;
  94. PRIVATE struct CompFont  CFont   = { 0, };
  95. PRIVATE struct TextAttr  Attr    = { 0, };
  96. PRIVATE struct TextAttr *Font    = NULL;
  97.  
  98. PRIVATE UBYTE em[256], *ErrMsg = &em[0];
  99.  
  100. // TTTTTTTTT ToolTypes: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
  101.  
  102. PRIVATE char AssignCmd[]    = "ASSIGNCMD";
  103. PRIVATE char LockCmd[]      = "LOCKCMD";
  104. PRIVATE char MountCmd[]     = "MOUNTCMD";
  105. PRIVATE char MemoryCmd[]    = "MEMORYCMD";
  106. PRIVATE char ScreenCmd[]    = "SCREENCMD";
  107. PRIVATE char TaskCmd[]      = "TASKCMD";
  108. PRIVATE char VectorCmd[]    = "VECTORCMD";
  109. PRIVATE char DeviceCmd[]    = "DEVICECMD";
  110. PRIVATE char FontCmd[]      = "FONTCMD";
  111. PRIVATE char HardwareCmd[]  = "HARDWARECMD";
  112. PRIVATE char InterruptCmd[] = "INTERRUPTCMD";
  113. PRIVATE char PortCmd[]      = "PORTCMD";
  114. PRIVATE char ResidentCmd[]  = "RESIDENTCMD";
  115. PRIVATE char SemaphoreCmd[] = "SEMAPHORECMD";
  116.  
  117. PRIVATE char DefAssignCmd[32]    = "SysAssigns";
  118. PRIVATE char DefLockCmd[32]      = "SysLocks";
  119. PRIVATE char DefMountCmd[32]     = "SysMounts";
  120. PRIVATE char DefMemoryCmd[32]    = "SysMemory";
  121. PRIVATE char DefScreenCmd[32]    = "SysScreens";
  122. PRIVATE char DefTaskCmd[32]      = "SysTasks";
  123. PRIVATE char DefVectorCmd[32]    = "SysVectors";
  124. PRIVATE char DefDeviceCmd[32]    = "SysDevices";
  125. PRIVATE char DefFontCmd[32]      = "SysFonts";
  126. PRIVATE char DefHardwareCmd[32]  = "SysHardware";
  127. PRIVATE char DefInterruptCmd[32] = "SysInterrupts";
  128. PRIVATE char DefPortCmd[32]      = "SysPorts";
  129. PRIVATE char DefResidentCmd[32]  = "SysResidents";
  130. PRIVATE char DefSemaphoreCmd[32] = "SysSemaphores";
  131.  
  132. PRIVATE char *TTAssignCmd    = &DefAssignCmd[0];
  133. PRIVATE char *TTLockCmd      = &DefLockCmd[0];
  134. PRIVATE char *TTMountCmd     = &DefMountCmd[0];
  135. PRIVATE char *TTMemoryCmd    = &DefMemoryCmd[0];
  136. PRIVATE char *TTScreenCmd    = &DefScreenCmd[0];
  137. PRIVATE char *TTTaskCmd      = &DefTaskCmd[0];
  138. PRIVATE char *TTVectorCmd    = &DefVectorCmd[0];
  139. PRIVATE char *TTDeviceCmd    = &DefDeviceCmd[0];
  140. PRIVATE char *TTFontCmd      = &DefFontCmd[0];
  141. PRIVATE char *TTHardwareCmd  = &DefHardwareCmd[0];
  142. PRIVATE char *TTInterruptCmd = &DefInterruptCmd[0];
  143. PRIVATE char *TTPortCmd      = &DefPortCmd[0];
  144. PRIVATE char *TTResidentCmd  = &DefResidentCmd[0];
  145. PRIVATE char *TTSemaphoreCmd = &DefSemaphoreCmd[0];
  146.  
  147. // TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
  148.  
  149. PRIVATE struct DiskObject *diskobj = NULL;
  150.  
  151. PRIVATE struct IntuiText SysIText = {
  152.  
  153.    2, 0, JAM1,143, 12, NULL, 
  154.    (UBYTE *) "Pick what you want to check out:", NULL 
  155. };
  156.  
  157. PRIVATE UWORD SysGTypes[] = {
  158.  
  159.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  160.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  161.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  162.    BUTTON_KIND,   BUTTON_KIND,   BUTTON_KIND,
  163.    BUTTON_KIND,   BUTTON_KIND
  164. };
  165.  
  166. PRIVATE int AssignBtClicked(    void );
  167. PRIVATE int LockBtClicked(      void );
  168. PRIVATE int MountBtClicked(     void );
  169. PRIVATE int MemoryBtClicked(    void );
  170. PRIVATE int ScreenBtClicked(    void );
  171. PRIVATE int TaskBtClicked(      void );
  172. PRIVATE int VectorBtClicked(    void );
  173. PRIVATE int DeviceBtClicked(    void );
  174. PRIVATE int FontBtClicked(      void );
  175. PRIVATE int HardwareBtClicked(  void );
  176. PRIVATE int InterruptBtClicked( void );
  177. PRIVATE int PortBtClicked(      void );
  178. PRIVATE int ResidentBtClicked(  void );
  179. PRIVATE int SemaphoreBtClicked( void );
  180.  
  181. PRIVATE struct NewGadget SysNGad[] = {
  182.  
  183.    146 , 44, 100, 17, (UBYTE *) "_Assignments", NULL, AssignBt,    
  184.    PLACETEXT_IN, NULL, (APTR) AssignBtClicked,
  185.    
  186.    146,  24, 100, 17, (UBYTE *) "_Locks",       NULL, LockBt,      
  187.    PLACETEXT_IN, NULL, (APTR) LockBtClicked,
  188.  
  189.    146,  64, 100, 17, (UBYTE *) "Mou_nts",      NULL, MountBt,
  190.    PLACETEXT_IN, NULL, (APTR) MountBtClicked,
  191.  
  192.     40,  64, 100, 17, (UBYTE *) "_Memory",      NULL, MemoryBt,    
  193.    PLACETEXT_IN, NULL, (APTR) MemoryBtClicked,
  194.  
  195.     40,  24, 100, 17, (UBYTE *) "_Screens",     NULL, ScreenBt,    
  196.    PLACETEXT_IN, NULL, (APTR) ScreenBtClicked,
  197.  
  198.     40,  44, 100, 17, (UBYTE *) "_Tasks",       NULL, TaskBt,      
  199.    PLACETEXT_IN, NULL, (APTR) TaskBtClicked,
  200.  
  201.    146, 144, 100, 17, (UBYTE *) "_Vectors",     NULL, VectorBt,    
  202.    PLACETEXT_IN, NULL, (APTR) VectorBtClicked,
  203.  
  204.     40,  84, 100, 17, (UBYTE *) "_Devices",     NULL, DeviceBt,    
  205.    PLACETEXT_IN, NULL, (APTR) DeviceBtClicked,
  206.  
  207.     40, 104, 100, 17, (UBYTE *) "_Fonts",       NULL, FontBt,      
  208.    PLACETEXT_IN, NULL, (APTR) FontBtClicked,
  209.  
  210.    146, 104, 100, 17, (UBYTE *) "_Hardware",    NULL, HardwareBt,  
  211.    PLACETEXT_IN, NULL, (APTR) HardwareBtClicked,
  212.    
  213.    146, 124, 100, 17, (UBYTE *) "_Interrupts",  NULL, InterruptBt, 
  214.    PLACETEXT_IN, NULL, (APTR) InterruptBtClicked,
  215.  
  216.     40, 124, 100, 17, (UBYTE *) "_Ports",       NULL, PortBt,     
  217.    PLACETEXT_IN, NULL, (APTR) PortBtClicked,
  218.  
  219.    146,  84, 100, 17, (UBYTE *) "_Residents",   NULL, ResidentBt,  
  220.    PLACETEXT_IN, NULL, (APTR) ResidentBtClicked,
  221.  
  222.     40, 144, 100, 17, (UBYTE *) "S_emaphores",  NULL, SemaphoreBt, 
  223.    PLACETEXT_IN, NULL, (APTR) SemaphoreBtClicked
  224. };
  225.  
  226. PRIVATE ULONG SysGTags[] = {
  227.  
  228.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  229.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  230.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  231.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  232.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  233.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE,
  234.    GT_Underscore, '_', TAG_DONE,   GT_Underscore, '_', TAG_DONE
  235. };
  236.  
  237. // ----------------------------------------------------------------------- 
  238.  
  239. PRIVATE int SetupScreen( void )
  240. {
  241.    Font = &Attr;
  242.  
  243.    if ((Scr = LockPubScreen( PubScreenName )) == NULL)
  244.       return( -1 );
  245.  
  246.    ComputeFont( Scr, Font, &CFont, 0, 0 );
  247.  
  248.    if ((VisualInfo = GetVisualInfo( Scr, TAG_DONE )) == NULL)
  249.       return( -2 );
  250.  
  251.    return( 0 );
  252. }
  253.  
  254. PRIVATE void CloseDownScreen( void )
  255. {
  256.    if (VisualInfo != NULL) 
  257.       {
  258.       FreeVisualInfo( VisualInfo );
  259.       VisualInfo = NULL;
  260.       }
  261.  
  262.    if (Scr != NULL) 
  263.       {
  264.       UnlockPubScreen( NULL, Scr );
  265.       Scr = NULL;
  266.       }
  267.  
  268.    return;
  269. }
  270.  
  271. PRIVATE char cmd[256], *command = &cmd[0];
  272.  
  273. PRIVATE struct TagItem RunTags[] = { SYS_Asynch, TRUE, TAG_DONE }; 
  274.  
  275. PRIVATE void RunCommand( char *command )
  276. {
  277.    if (System( command, TAG_DONE ) < 0)
  278.       {
  279.       sprintf( ErrMsg,
  280.                "\t%s\ncouldn't be run by the System,\ncheck your spelling!",
  281.                command
  282.              );
  283.  
  284.       (void) Handle_Problem( ErrMsg, "Invalid ToolType?", NULL );
  285.       }
  286.  
  287.    return;
  288. }
  289.  
  290. PRIVATE int AssignBtClicked( void )
  291. {
  292.    strcpy( command, TTAssignCmd );
  293.    RunCommand( command );
  294.    return( (int) TRUE );
  295. }
  296.  
  297. PRIVATE int LockBtClicked( void )
  298. {
  299.    strcpy( command, TTLockCmd );
  300.    RunCommand( command );
  301.    return( (int) TRUE );
  302. }
  303.  
  304. PRIVATE int MountBtClicked( void )
  305. {
  306.    strcpy( command, TTMountCmd );
  307.    RunCommand( command );
  308.    return( (int) TRUE );
  309. }
  310.  
  311. PRIVATE int MemoryBtClicked( void )
  312. {
  313.    strcpy( command, TTMemoryCmd );
  314.    RunCommand( command );
  315.    return( (int) TRUE );
  316. }
  317.  
  318. PRIVATE int ScreenBtClicked( void )
  319. {
  320.    strcpy( command, TTScreenCmd );
  321.    RunCommand( command );
  322.    return( (int) TRUE );
  323. }
  324.  
  325. PRIVATE int TaskBtClicked( void )
  326. {
  327.    strcpy( command, TTTaskCmd );
  328.    RunCommand( command );
  329.    return( (int) TRUE );
  330. }
  331.  
  332. PRIVATE int VectorBtClicked( void )
  333. {
  334.    strcpy( command, TTVectorCmd );
  335.    RunCommand( command );
  336.    return( (int) TRUE );
  337. }
  338.  
  339. PRIVATE int DeviceBtClicked( void )
  340. {
  341.    strcpy( command, TTDeviceCmd );
  342.    RunCommand( command );
  343.    return( (int) TRUE );
  344. }
  345.  
  346. PRIVATE int FontBtClicked( void )
  347. {
  348.    strcpy( command, TTFontCmd );
  349.    RunCommand( command );
  350.    return( (int) TRUE );
  351. }
  352.  
  353. PRIVATE int HardwareBtClicked( void )
  354. {
  355.    strcpy( command, TTHardwareCmd );
  356.    RunCommand( command );
  357.    return( (int) TRUE );
  358. }
  359.  
  360. PRIVATE int InterruptBtClicked( void )
  361. {
  362.    strcpy( command, TTInterruptCmd );
  363.    RunCommand( command );
  364.    return( (int) TRUE );
  365. }
  366.  
  367. PRIVATE int PortBtClicked( void )
  368. {
  369.    strcpy( command, TTPortCmd );
  370.    RunCommand( command );
  371.    return( (int) TRUE );
  372. }
  373.  
  374. PRIVATE int ResidentBtClicked( void )
  375. {
  376.    strcpy( command, TTResidentCmd );
  377.    RunCommand( command );
  378.    return( (int) TRUE );
  379. }
  380.  
  381. PRIVATE int SemaphoreBtClicked( void )
  382. {
  383.    strcpy( command, TTSemaphoreCmd );
  384.    RunCommand( command );
  385.    return( (int) TRUE );
  386. }
  387.  
  388. PRIVATE void CloseSysWindow( void )
  389. {
  390.    if (SysWnd != NULL) 
  391.       {
  392.       CloseWindow( SysWnd );
  393.       SysWnd = NULL;
  394.       }
  395.  
  396.    if (SysGList != NULL) 
  397.       {
  398.       FreeGadgets( SysGList );
  399.       SysGList = NULL;
  400.       }
  401.  
  402.    if (SysFont != NULL) 
  403.       {
  404.       CloseFont( SysFont );
  405.       SysFont = NULL;
  406.       }
  407.  
  408.    return;
  409. }
  410.  
  411. PRIVATE int SysCloseWindow( void )
  412. {
  413.    CloseSysWindow();
  414.    return( (int) FALSE );
  415. }
  416.  
  417. PRIVATE int SysVanillaKey( int whichkey )
  418. {
  419.    int rval = TRUE;
  420.    
  421.    switch (whichkey)
  422.       {
  423.       case 'A':
  424.       case 'a':
  425.          rval = AssignBtClicked();      break;
  426.  
  427.       case 'L':
  428.       case 'l':
  429.          rval = LockBtClicked();        break;
  430.  
  431.       case 'n':
  432.       case 'N':
  433.          rval = MountBtClicked();       break;
  434.  
  435.       case 'M':
  436.       case 'm':
  437.          rval = MemoryBtClicked();      break;
  438.          
  439.       case 'S':
  440.       case 's':
  441.          rval = ScreenBtClicked();      break;
  442.  
  443.       case 'T':
  444.       case 't':
  445.          rval = TaskBtClicked();        break;
  446.  
  447.       case 'V':
  448.       case 'v':
  449.          rval = VectorBtClicked();      break;
  450.  
  451.       case 'D':
  452.       case 'd':
  453.          rval = DeviceBtClicked();      break;
  454.  
  455.       case 'F':
  456.       case 'f':
  457.          rval = FontBtClicked();        break;
  458.    
  459.       case 'H':
  460.       case 'h':
  461.          rval = HardwareBtClicked();    break;
  462.       
  463.       case 'I':
  464.       case 'i':
  465.          rval = InterruptBtClicked();   break;
  466.  
  467.       case 'P':
  468.       case 'p':
  469.          rval = PortBtClicked();        break;
  470.  
  471.       case 'R':
  472.       case 'r':
  473.          rval = ResidentBtClicked();    break;
  474.       
  475.       case 'e':
  476.       case 'E':
  477.          rval = SemaphoreBtClicked();   break;
  478.  
  479.       case 'q':  // Exit program keys:
  480.       case 'Q':
  481.       case 'x':
  482.       case 'X':
  483.          rval = FALSE;
  484.          break;
  485.       }
  486.  
  487.    return( (int) rval );
  488. }
  489.  
  490. PRIVATE void SysRender( void )
  491. {
  492.    struct IntuiText it;
  493.  
  494.    ComputeFont( Scr, Font, &CFont, SysWidth, SysHeight );
  495.  
  496.    CopyMem( (char *) &SysIText, (char *) &it, 
  497.             (long) sizeof( struct IntuiText )
  498.           );
  499.  
  500.    it.ITextFont = Font;
  501.  
  502.    it.LeftEdge  = CFont.OffX + ComputeX( CFont.FontX, it.LeftEdge ) 
  503.                   - (IntuiTextLength( &it ) >> 1);
  504.    
  505.    it.TopEdge   = CFont.OffY + ComputeY( CFont.FontY, it.TopEdge ) 
  506.                   - (Font->ta_YSize >> 1);
  507.  
  508.    PrintIText( SysWnd->RPort, &it, 0, 0 );
  509.  
  510.    return;
  511. }
  512.  
  513. PRIVATE int OpenSysWindow( void )
  514. {
  515.    struct NewGadget  ng;
  516.    struct Gadget    *g;
  517.    UWORD             lc, tc;
  518.    UWORD             wleft = SysLeft, wtop = SysTop, ww, wh;
  519.  
  520.    ComputeFont( Scr, Font, &CFont, SysWidth, SysHeight );
  521.  
  522.    ww = ComputeX( CFont.FontX, SysWidth );
  523.    wh = ComputeY( CFont.FontY, SysHeight );
  524.  
  525.    if ((wleft + ww + CFont.OffX + Scr->WBorRight) > Scr->Width) 
  526.       wleft = Scr->Width - ww;
  527.    
  528.    if ((wtop + wh + CFont.OffY + Scr->WBorBottom) > Scr->Height) 
  529.       wtop = Scr->Height - wh;
  530.  
  531.    if ((SysFont = OpenDiskFont( Font )) == NULL)
  532.       return( -5 );
  533.  
  534.    if ((g = CreateContext( &SysGList )) == NULL)
  535.       return( -1 );
  536.  
  537.    for (lc = 0, tc = 0; lc < Sys_CNT; lc++) 
  538.       {
  539.       CopyMem( (char *) &SysNGad[ lc ], (char *) &ng, 
  540.                (long) sizeof( struct NewGadget )
  541.              );
  542.  
  543.       ng.ng_VisualInfo = VisualInfo;
  544.       ng.ng_TextAttr   = Font;
  545.  
  546.       ng.ng_LeftEdge   = CFont.OffX + ComputeX( CFont.FontX, 
  547.                                                 ng.ng_LeftEdge
  548.                                               );
  549.  
  550.       ng.ng_TopEdge    = CFont.OffY + ComputeY( CFont.FontY, 
  551.                                                 ng.ng_TopEdge
  552.                                               );
  553.  
  554.       ng.ng_Width      = ComputeX( CFont.FontX, ng.ng_Width );
  555.       ng.ng_Height     = ComputeY( CFont.FontY, ng.ng_Height);
  556.  
  557.       SysGadgets[ lc ] = g = CreateGadgetA( (ULONG) SysGTypes[ lc ], 
  558.                                g, 
  559.                                &ng, 
  560.                                (struct TagItem *) &SysGTags[ tc ] );
  561.  
  562.       while (SysGTags[ tc ] != NULL) 
  563.          tc += 2;
  564.       
  565.       tc++;
  566.  
  567.       if (g == NULL)
  568.          return( -2 );
  569.       }
  570.  
  571.    if ((SysWnd = OpenWindowTags( NULL,
  572.              WA_Left,        wleft,
  573.              WA_Top,         wtop,
  574.              WA_Width,       ww + CFont.OffX + Scr->WBorRight,
  575.              WA_Height,      wh + CFont.OffY + Scr->WBorBottom,
  576.              
  577.              WA_IDCMP,       BUTTONIDCMP | IDCMP_CLOSEWINDOW 
  578.                | IDCMP_VANILLAKEY | IDCMP_REFRESHWINDOW,
  579.              
  580.              WA_Flags,       WFLG_DRAGBAR | WFLG_DEPTHGADGET 
  581.                | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE 
  582.                | WFLG_RMBTRAP,
  583.  
  584.              WA_Gadgets,     SysGList,
  585.              WA_Title,       SysWdt,
  586.              WA_ScreenTitle, SysScrTitle,
  587.              TAG_DONE )
  588.       ) == NULL)
  589.       return( -4 );
  590.  
  591.    GT_RefreshWindow( SysWnd, NULL );
  592.  
  593.    SysRender();
  594.  
  595.    return( 0 );
  596. }
  597.  
  598. PRIVATE int HandleSysIDCMP( void )
  599. {
  600.    struct IntuiMessage *m;
  601.    int                (*func)( void );
  602.    BOOL                 running = TRUE;
  603.  
  604.    while (running == TRUE)
  605.       {
  606.       if ((m = GT_GetIMsg( SysWnd->UserPort )) == NULL) 
  607.          {
  608.          (void) Wait( 1L << SysWnd->UserPort->mp_SigBit );
  609.          continue;
  610.          }
  611.  
  612.       CopyMem( (char *) m, (char *) &SysMsg, 
  613.                (long) sizeof( struct IntuiMessage )
  614.              );
  615.  
  616.       GT_ReplyIMsg( m );
  617.  
  618.       switch (SysMsg.Class) 
  619.          {
  620.          case   IDCMP_REFRESHWINDOW:
  621.             GT_BeginRefresh( SysWnd );
  622.             SysRender();
  623.             GT_EndRefresh( SysWnd, TRUE );
  624.             break;
  625.  
  626.          case   IDCMP_CLOSEWINDOW:
  627.             running = SysCloseWindow();
  628.             break;
  629.  
  630.          case   IDCMP_VANILLAKEY:
  631.             running = SysVanillaKey( SysMsg.Code );
  632.             break;
  633.  
  634.          case   IDCMP_GADGETUP:
  635.             func = (void *) ((struct Gadget *)SysMsg.IAddress)->UserData;
  636.             if (func != NULL)
  637.                running = func();
  638.             break;
  639.          }
  640.       }
  641.  
  642.    return( running );
  643. }
  644.  
  645. PRIVATE void ShutdownProgram( void )
  646. {
  647.    CloseSysWindow();
  648.    CloseDownScreen();
  649.  
  650.    if (IconBase != NULL)
  651.       CloseLibrary( IconBase );
  652.  
  653.    CloseLibs();
  654.  
  655.    return;
  656. }
  657.  
  658. // ------------------------------------------------------------------
  659.  
  660. PRIVATE int SetupProgram( void )
  661. {
  662.    if (OpenLibs() < 0)
  663.       return( -1 );
  664.       
  665.    if ((IconBase = OpenLibrary( "icon.library", 37L )) == NULL)
  666.       {
  667.       CloseLibs();
  668.       return( -3 );
  669.       }
  670.  
  671.    if (SetupScreen() < 0)
  672.       {
  673.       CloseLibs();
  674.       CloseLibrary( IconBase );
  675.       return( -5 );
  676.       }   
  677.  
  678.    if (OpenSysWindow() < 0)
  679.       {
  680.       ShutdownProgram();
  681.       return( -6 );
  682.       }   
  683.  
  684.    return( 0 );   
  685. }
  686.  
  687. PRIVATE void SetValidGadgets( void )
  688. {
  689.    if (strcmp( TTAssignCmd, "NOT_DONE" ) == 0)
  690.       GT_SetGadgetAttrs( SysGadgets[ AssignBt ], SysWnd, NULL,
  691.                          GA_Disabled, TRUE, TAG_DONE    
  692.                        );
  693.  
  694.    if (strcmp( TTLockCmd, "NOT_DONE" ) == 0)
  695.       GT_SetGadgetAttrs( SysGadgets[ LockBt ], SysWnd, NULL,
  696.                          GA_Disabled, TRUE, TAG_DONE    
  697.                        );
  698.  
  699.    if (strcmp( TTMountCmd, "NOT_DONE" ) == 0)
  700.       GT_SetGadgetAttrs( SysGadgets[ MountBt ], SysWnd, NULL,
  701.                          GA_Disabled, TRUE, TAG_DONE    
  702.                        );
  703.  
  704.    if (strcmp( TTMemoryCmd, "NOT_DONE" ) == 0)
  705.       GT_SetGadgetAttrs( SysGadgets[ MemoryBt ], SysWnd, NULL,
  706.                          GA_Disabled, TRUE, TAG_DONE    
  707.                        );
  708.  
  709.    if (strcmp( TTScreenCmd, "NOT_DONE" ) == 0)
  710.       GT_SetGadgetAttrs( SysGadgets[ ScreenBt ], SysWnd, NULL,
  711.                          GA_Disabled, TRUE, TAG_DONE    
  712.                        );
  713.  
  714.    if (strcmp( TTTaskCmd, "NOT_DONE" ) == 0)
  715.       GT_SetGadgetAttrs( SysGadgets[ TaskBt ], SysWnd, NULL,
  716.                          GA_Disabled, TRUE, TAG_DONE    
  717.                        );
  718.  
  719.    if (strcmp( TTVectorCmd, "NOT_DONE" ) == 0)
  720.       GT_SetGadgetAttrs( SysGadgets[ VectorBt ], SysWnd, NULL,
  721.                          GA_Disabled, TRUE, TAG_DONE    
  722.                        );
  723.  
  724.    if (strcmp( TTDeviceCmd, "NOT_DONE" ) == 0)
  725.       GT_SetGadgetAttrs( SysGadgets[ DeviceBt ], SysWnd, NULL,
  726.                          GA_Disabled, TRUE, TAG_DONE    
  727.                        );
  728.  
  729.    if (strcmp( TTFontCmd, "NOT_DONE" ) == 0)
  730.       GT_SetGadgetAttrs( SysGadgets[ FontBt ], SysWnd, NULL,
  731.                          GA_Disabled, TRUE, TAG_DONE    
  732.                        );
  733.  
  734.    if (strcmp( TTHardwareCmd, "NOT_DONE" ) == 0)
  735.       GT_SetGadgetAttrs( SysGadgets[ HardwareBt ], SysWnd, NULL,
  736.                          GA_Disabled, TRUE, TAG_DONE    
  737.                        );
  738.  
  739.    if (strcmp( TTInterruptCmd, "NOT_DONE" ) == 0)
  740.       GT_SetGadgetAttrs( SysGadgets[ InterruptBt ], SysWnd, NULL,
  741.                          GA_Disabled, TRUE, TAG_DONE    
  742.                        );
  743.  
  744.    if (strcmp( TTPortCmd, "NOT_DONE" ) == 0)
  745.       GT_SetGadgetAttrs( SysGadgets[ PortBt ], SysWnd, NULL,
  746.                          GA_Disabled, TRUE, TAG_DONE    
  747.                        );
  748.  
  749.    if (strcmp( TTResidentCmd, "NOT_DONE" ) == 0)
  750.       GT_SetGadgetAttrs( SysGadgets[ ResidentBt ], SysWnd, NULL,
  751.                          GA_Disabled, TRUE, TAG_DONE    
  752.                        );
  753.  
  754.    if (strcmp( TTSemaphoreCmd, "NOT_DONE" ) == 0)
  755.       GT_SetGadgetAttrs( SysGadgets[ SemaphoreBt ], SysWnd, NULL,
  756.                          GA_Disabled, TRUE, TAG_DONE    
  757.                        );
  758.  
  759.    return;
  760. }
  761.  
  762. PRIVATE void *processToolTypes( char **toolptr )
  763. {
  764.    if (toolptr == NULL)
  765.       return( NULL );
  766.  
  767.    TTAssignCmd    = GetToolStr( toolptr, AssignCmd,    DefAssignCmd    );
  768.    TTLockCmd      = GetToolStr( toolptr, LockCmd,      DefLockCmd      );
  769.    TTMountCmd     = GetToolStr( toolptr, MountCmd,     DefMountCmd     );
  770.    TTMemoryCmd    = GetToolStr( toolptr, MemoryCmd,    DefMemoryCmd    );
  771.    TTScreenCmd    = GetToolStr( toolptr, ScreenCmd,    DefScreenCmd    );
  772.    TTTaskCmd      = GetToolStr( toolptr, TaskCmd,      DefTaskCmd      );
  773.    TTVectorCmd    = GetToolStr( toolptr, VectorCmd,    DefVectorCmd    );
  774.    TTDeviceCmd    = GetToolStr( toolptr, DeviceCmd,    DefDeviceCmd    );
  775.    TTFontCmd      = GetToolStr( toolptr, FontCmd,      DefFontCmd      );
  776.    TTHardwareCmd  = GetToolStr( toolptr, HardwareCmd,  DefHardwareCmd  );
  777.    TTInterruptCmd = GetToolStr( toolptr, InterruptCmd, DefInterruptCmd );
  778.    TTPortCmd      = GetToolStr( toolptr, PortCmd,      DefPortCmd      );
  779.    TTResidentCmd  = GetToolStr( toolptr, ResidentCmd,  DefResidentCmd  );
  780.    TTSemaphoreCmd = GetToolStr( toolptr, SemaphoreCmd, DefSemaphoreCmd );
  781.  
  782.    return( NULL );
  783. }
  784.  
  785. PUBLIC int main( int argc, char **argv )
  786. {
  787.    struct WBArg  *wbarg;
  788.    char         **toolptr = NULL;
  789.  
  790.    if (SetupProgram() < 0)
  791.       {
  792.       fprintf( stderr, "Couldn't set up %s!\n", argv[0] );
  793.       return( RETURN_FAIL );
  794.       }
  795.  
  796.    if (argc > 0)    /* from CLI:       */
  797.       {
  798.       // We prefer to use the ToolTypes: 
  799.       (void) FindIcon( &processToolTypes, diskobj, argv[0] );
  800.       }
  801.    else             /* from Workbench: */
  802.       {
  803.       IMPORT char *_WBArgv;
  804.       
  805.       // argc = _WBArgc;
  806.       argv = _WBArgv;
  807.       
  808.       wbarg   = &(_WBenchMsg->sm_ArgList[ _WBenchMsg->sm_NumArgs - 1 ]);
  809.       toolptr = FindTools( diskobj, wbarg->wa_Name, wbarg->wa_Lock );
  810.  
  811.       (void) processToolTypes( toolptr );
  812.       }
  813.  
  814.    SetValidGadgets();
  815.    SetNotifyWindow( SysWnd );
  816.  
  817.    (void) HandleSysIDCMP();
  818.  
  819.    FreeDiskObject( diskobj );   
  820.  
  821.    ShutdownProgram();
  822.  
  823.    return( RETURN_OK );
  824. }
  825.  
  826. /* ------------------- END of SystemViewer.c file! -------------------- */
  827.